package homework.akkademo;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;

public class AkkaApp {

    public static void main(String[] args) {
        // 通过ActorSystem 或者 ActorContext 来创建 Actor
        // ActorSystem是一个比较重量级的对象，一般来说一个应用程序只需要创建一个该对象, 名字可以省略，但是最好写上，并且不能重名
        //
        ActorSystem system = ActorSystem.create("sys");
        // actorOf 返回的不是Actor本身，而是Actor的引用
        ActorRef actorRef = system.actorOf(Props.create(MyAkka.class), "myAkka");
        // 发送消息 tell、ask 都是异步给一个Actor发送消息
        // tell: 发完消息立即返回
        // ask: 期待得到一个返回结果，再一定时间内没有得到返回结果，发送方会收到一个超时异常
        // ActorRef.noSender() : 表示无发送者，在Actor内部可以调用getSender()方法获取发送者
        actorRef.tell("hello akka",
                ActorRef.noSender());

        ActorRef lookupActorRef = system.actorOf(Props.create(LookupActor.class), "lookupActor");
        lookupActorRef.tell("find",
                ActorRef.noSender());
    }
}
